//? async await本质上是Generator的语法糖

//? 写一个异步函数
function getNumber(num) {
    return new Promise(resolve => {
        setTimeout(() => {
            resolve(num + 1)
        },1000)
    })
}
//? 自动执行器，如果一个Generator函数没有执行完，则递归调用
function asyncFun(callback) {
    const gen = callback()
    function next(data) {
        //? 因为执行getNumber 返回的val是Promise
        const ye = gen.next(data)
        if (ye.done) {
            return ye.value
        }
        //? 执行Promise的then方法 拿到resolve里的数据 递归进行本函数 这就实现了await的作用 拿到上一步的结果 再进行操作
        ye.value.then((data) => {
            next(data)
        })
    }
    next()
}
const func = function *() {
    //? yield能接收到解决值，也就是当Promise resolved后能够被yield接收到
    const f1 = yield getNumber(1)
    console.log(f1)
    const f2 = yield getNumber(f1)
    console.log(f2)
    const f3 = yield getNumber(f2)
    console.log(f3)
}
asyncFun(func)
